# -*- coding: utf-8 -*-

"""
@Datetime: 2019/5/21
@Author: Zhang Yafei
局部变量
"""

# 定义局部变量


# def func1():
#     names = [1,2,3]
#     print(names)


# func1()


# 局部变量和全局变量名字相同时
# 1. 使用局部变量
# names = ['科比', '乔丹', '詹姆斯', '杜兰特']


# def change_name():
#     print('函数内1:', names)  UnboundLocal: Errorlocal variable 'names' referenced before assignment
#     names = [12, 3, 4]
#     print('函数内2:', names)


# change_name()
# print('函数外：', names)

# 2. 在函数内部修改全局变量
# names = ['科比', '乔丹', '詹姆斯', '杜兰特']


# def change_name():
#     global names
#     names = [1, 2, 3]
#     print('函数内：', names)


# change_name()
# print('函数外：', names)


# 嵌套函数:闭包
# =====> 1. 函数内部可以再次定义函数。2. 执行需要被调用 ，《＝＝＝＝＝

# 1. 闭包的简单使用
# def func1():
#     print('我是函数func1')
#
#     def func2():
#         print('我是函数func2')
#
#     func2()
#
#
# func1()
# 我是函数func1
# 我是函数func2

# 2. 闭包内部使用局部变量和全局变量

# 例1
# age = 19
#
#
# def func1():
#     age = 73
#
#     def func2():
#         print(age)
#
#     func2()
#
#
# func1()  # 73

# 例2
# age = 19
#
#
# def func1():
#     def func2():
#         print(age)
#
#     age = 73
#     func2()
#
#
# func1()

# 例3
# age = 19
#
#
# def func1():
#     global age
#
#     def func2():
#         print(age)
#
#     age = 73
#     func2()
#
#
# func1()
# print(age)

# 3. func1() #
# func1()
# 4. func1()


# 作用域

# Python中函数就是一个作用域（JavaScript）,局部变量放置在其作用域中
# C＃ Java中作用域｛｝
# 代码定义完成后，作用域已经生成，作用域链向上查找

# age = 18
#
#
# def func1():
#     age = 73
#
#     def func2():
#         print(age)
#
#     return 666
#
#
# val = func1()
# print(val)

# age = 18
#
#
# def func1():
#     age = 73
#
#     def func2():
#         print(age)
#
#     return func2
#
#
# val = func1()
# val()

# 什么结果？  73
# 函数名返回值
